
/**
	This file is part of MemoryTrace.

	MemoryTrace is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

        Contributed by Ameziane NAIT ABDELAZIZ and Bruno LATHUILIERE at EDF R&D 
	SINECTICS I23 Clamart.
        
	MemoryTrace is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with MemoryTrace.  If not, see <http://www.gnu.org/licenses/>.
**/

/*! \file alloc_stats.h
    \brief Structure de données regroupant les statistiques d'allocation
*/

#ifndef __ALLOC_STATS__H
#define __ALLOC_STATS__H

#include <stdlib.h>

/**
 *\brief Une structure de donnees utilisee pour stocker des statistique sur malloc,calloc,free,realloc.
 */
typedef struct
{
  /**
   *quantifie la quantite de memoire utile consommee par le tas (ne compte pas la fragmentation)
   */
  size_t memory_allocation;
  
  /**
   *compte le nombre d'appel à la fonction malloc.
   */
  unsigned int compteur_malloc;
  
  /**
   *compte le nombre d'appel à la fonction realloc
   */
  unsigned int compteur_realloc;
  /**
   *compte le nombre d'appel à la fonction calloc.
   */
  unsigned int compteur_calloc;
  
  /**
   *compte le nombre d'appel à la fonction free.
   */
  unsigned int compteur_free;
  
  
  /**
   *utilise pour stocker la taille de la derniere requete d'alloction
   */
  size_t size;
  
  /**
   *stocke la derniere adresse retournee par un appel à l'interface malloc.
   *Attention cette variable n'est pas thread safe, il faut à tout prix la manipuler dans une section
   *critique.
   */
  void* current_addr;
  
  /**
   *compteur en terme d'evenement d'allocation, permet d'ordonner les differents appels à l'interface malloc.	
   */
  unsigned int compteur;
  
  /**
   *utile que pour l'appel calloc, stocke le nombre de bloc demande.
   */
  size_t nmemb;
}alloc_stats;

#endif
